name mangling(名称改编/符号改编):在编译器与链接器处理中,把源代码里的函数名、类名等改写成带有额外信息的唯一符号名(例如参数类型、命名空间、类作用域等),以支持函数重载、命名空间区分等特性;链接时依靠这些符号名进行匹配。该术语也常被称为 symbol mangling。在不同编译器/平台上,改写规则可能不同,从而造成 ABI(应用二进制接口)不兼容等问题。
/ˈneɪm ˈmæŋɡlɪŋ/
The linker failed because of name mangling between the C and C++ files.
链接失败了,因为 C 文件和 C++ 文件之间存在名称改编(name mangling)差异。
Because different compilers use different name mangling schemes, mixing object files can cause unresolved symbols.
由于不同编译器使用不同的名称改编方案,混用目标文件可能导致符号无法解析。
mangle 原义是“把东西弄乱、揉碎、破坏性地改动”。在编程语境中,name mangling 比喻“把名字改得面目全非”,但目的不是破坏,而是把额外信息编码进符号名里,确保在链接阶段能唯一定位到正确的函数或方法。